package com.cos.hospital.widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.cos.hospital.R;
import com.cos.hospital.tool.UTxt;

/**
 * @Description: <p>
 * @Author: Kosmos
 * @Date: 2018年11月19日 22:54
 * @Email: KosmoSakura@foxmail.com
 */
public class KKeyboardView extends FrameLayout implements View.OnClickListener {
    private TextListener digitListener;
    private EditText[] textInput;
    private int pointer;//tab指针

    public KKeyboardView(Context context) {
        this(context, null);
    }

    public KKeyboardView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public KKeyboardView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.KKeyboardView, defStyleAttr, 0);
        //是否为字母键盘
        boolean letter = ta.getBoolean(R.styleable.KKeyboardView_letter, false);
        ta.recycle();
        View view;
        if (letter) {
            view = inflate(context, R.layout.lay_keyboard, this);
            view.findViewById(R.id.key_q).setOnClickListener(this);
            view.findViewById(R.id.key_w).setOnClickListener(this);
            view.findViewById(R.id.key_e).setOnClickListener(this);
            view.findViewById(R.id.key_r).setOnClickListener(this);
            view.findViewById(R.id.key_t).setOnClickListener(this);
            view.findViewById(R.id.key_y).setOnClickListener(this);
            view.findViewById(R.id.key_u).setOnClickListener(this);
            view.findViewById(R.id.key_i).setOnClickListener(this);
            view.findViewById(R.id.key_o).setOnClickListener(this);
            view.findViewById(R.id.key_p).setOnClickListener(this);
            view.findViewById(R.id.key_a).setOnClickListener(this);
            view.findViewById(R.id.key_s).setOnClickListener(this);
            view.findViewById(R.id.key_d).setOnClickListener(this);
            view.findViewById(R.id.key_f).setOnClickListener(this);
            view.findViewById(R.id.key_g).setOnClickListener(this);
            view.findViewById(R.id.key_h).setOnClickListener(this);
            view.findViewById(R.id.key_j).setOnClickListener(this);
            view.findViewById(R.id.key_k).setOnClickListener(this);
            view.findViewById(R.id.key_l).setOnClickListener(this);
            view.findViewById(R.id.key_z).setOnClickListener(this);
            view.findViewById(R.id.key_x).setOnClickListener(this);
            view.findViewById(R.id.key_c).setOnClickListener(this);
            view.findViewById(R.id.key_v).setOnClickListener(this);
            view.findViewById(R.id.key_b).setOnClickListener(this);
            view.findViewById(R.id.key_n).setOnClickListener(this);
            view.findViewById(R.id.key_m).setOnClickListener(this);
            view.findViewById(R.id.key_cancel).setOnClickListener(this);
            view.findViewById(R.id.key_del).setOnClickListener(this);
        } else {
            view = inflate(context, R.layout.lay_keyboard_digit, this);
            view.findViewById(R.id.key_0).setOnClickListener(this);
            view.findViewById(R.id.key_1).setOnClickListener(this);
            view.findViewById(R.id.key_2).setOnClickListener(this);
            view.findViewById(R.id.key_3).setOnClickListener(this);
            view.findViewById(R.id.key_4).setOnClickListener(this);
            view.findViewById(R.id.key_5).setOnClickListener(this);
            view.findViewById(R.id.key_6).setOnClickListener(this);
            view.findViewById(R.id.key_7).setOnClickListener(this);
            view.findViewById(R.id.key_8).setOnClickListener(this);
            view.findViewById(R.id.key_9).setOnClickListener(this);
            view.findViewById(R.id.key_del).setOnClickListener(this);
            view.findViewById(R.id.key_tab).setOnClickListener(this);
            view.findViewById(R.id.key_cancel).setOnClickListener(this);
            view.findViewById(R.id.key_done).setOnClickListener(this);
            view.findViewById(R.id.key_Less).setOnClickListener(this);
            view.findViewById(R.id.key_add).setOnClickListener(this);
        }
        view.setOnClickListener(this);
    }

    public void setInputText(int index, EditText... textInput) {
        if (UTxt.isEmpty(textInput)) {
            throw new NullPointerException("你闹哪样？");
        }
        this.textInput = textInput;
        pointer = index;
        textInput[0].postDelayed(() -> setVisibility(VISIBLE), 400);
    }

    public void setKeyboardDigitListener(TextListener listener) {
        digitListener = listener;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.key_q:
            case R.id.key_w:
            case R.id.key_e:
            case R.id.key_r:
            case R.id.key_t:
            case R.id.key_y:
            case R.id.key_u:
            case R.id.key_i:
            case R.id.key_o:
            case R.id.key_p:
            case R.id.key_a:
            case R.id.key_s:
            case R.id.key_d:
            case R.id.key_f:
            case R.id.key_g:
            case R.id.key_h:
            case R.id.key_j:
            case R.id.key_k:
            case R.id.key_l:
            case R.id.key_z:
            case R.id.key_x:
            case R.id.key_c:
            case R.id.key_v:
            case R.id.key_b:
            case R.id.key_n:
            case R.id.key_m:
            case R.id.key_0:
            case R.id.key_1:
            case R.id.key_2:
            case R.id.key_3:
            case R.id.key_4:
            case R.id.key_5:
            case R.id.key_6:
            case R.id.key_7:
            case R.id.key_8:
            case R.id.key_9:
            case R.id.key_Less:
            case R.id.key_add:
                if (textInput != null && textInput.length > pointer) {
                    textInput[pointer].append(((TextView) view).getText());
                }
                if (digitListener != null) {
                    digitListener.onTextClick(((TextView) view).getText().toString());
                }
                break;
            case R.id.key_tab:
                if (textInput != null && textInput.length > pointer) {
                    pointer++;
                    if (pointer >= textInput.length) {
                        pointer = 0;
                    }
                    textInput[pointer].setFocusable(true);
                    textInput[pointer].requestFocus();
                }
                break;
            case R.id.key_del:
                if (textInput != null && textInput.length > pointer) {
                    String txt = textInput[pointer].getText().toString();
                    if (!UTxt.isEmpty(txt)) {
                        textInput[pointer].setText(txt.substring(0, txt.length() - 1));
                        textInput[pointer].setSelection(txt.length() - 1);
                    }
                }
                if (digitListener != null) {
                    digitListener.OnDelClick();
                }
                break;
            case R.id.key_cancel:
                if (digitListener != null) {
                    digitListener.OnCancleClick();
                }
                hide();
                break;
            case R.id.key_done:
                if (digitListener != null) {
                    digitListener.OnCompleteClick();
                }
                hide();
                break;
        }
    }

    public void hide() {
        setVisibility(GONE);
    }

    public void show() {
        if (!isShown()) {
            setVisibility(VISIBLE);
        }
    }

    public interface TextListener {
        void onTextClick(String text);

        void OnDelClick();

        void OnCompleteClick();

        void OnCancleClick();
    }
}
